/*
 * wk_stack_link.h
 *
 *  Created on: 2012-3-11
 *      Author: tianmax
 */

#ifndef __WK_STACK_LINK_H__
#define __WK_STACK_LINK_H__

#include "wk_stack_link_types.h"

/*********************************************************************/
/**
 * 初始化数组栈
 */
extern WStackLink* wk_stack_link_init();

/**
 * 销毁栈
 */
extern void wk_stack_link_destroy(WStackLink* stack);
/*常用操作函数**********************************************************/

/**
 * 获取数组栈的的容量
 */
extern int wk_stack_link_size(WStackLink* stack);

/**
 * 获取数组栈中的元素的多少
 */
extern int wk_stack_link_count(WStackLink* stack);

/**
 * 清空栈中的所有内容，使其成为一个空栈
 */
extern int wk_stack_link_clear(WStackLink* stack);

/**
 * 栈是否满
 */
extern int wk_stack_link_isfull(WStackLink* stack);

/**
 * 判断栈是否空
 */
extern int wk_stack_link_isempty(WStackLink* stack);
/********************************************************************/
/**
 * 将元素e压入栈中
 */
extern void wk_stack_link_push(WStackLink* stack,WPElement e);

/*
 * 从栈顶弹出一个元素并且返回
 */
extern WPElement wk_stack_link_pop(WStackLink* stack);

/**
 * 获得栈顶元素，但是该栈顶元素不出栈
 */
extern WPElement wk_stack_link_top(WStackLink* stack);

/*******************************************************************/
/**
 * 遍历元素相关
 * ctx上下文
 */
extern void* wk_stack_link_iterate(WStackLink* stack,wk_element_iterate_do iterate_do,void* ctx);
/******************************************************************/
/**
 * wk_slist调试函数
 */
extern void wk_stack_link_debug();
/*******************************************************************/


#endif /* WK_STACK_LINK_H_ */
